package main

import (
	"fmt"
	"log"
	"net/rpc"
)

func main() {

	//首先是通过rpc.Dial拨号RPC服务, 建立连接
	client, err := rpc.Dial("tcp", "localhost:1234")

	if err != nil {
		log.Fatal("dialing:", err)
	}

	// 然后通过client.Call调用具体的RPC方法
	// 在调用client.Call时:
	// 		第一个参数是用点号链接的RPC服务名字和方法名字，
	// 		第二个参数是 请求参数
	//      第三个是请求响应, 必须是一个指针, 有底层rpc服务帮你赋值
	var reply string
	err = client.Call("HelloService.Hello", "cds", &reply)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(reply)
}

// rpc服务最多的优点就是 我们可以像使用本地函数一样使用 远程服务上的函数, 因此有几个关键点:

// 远程连接: 类似于我们的pkg
// 函数名称: 要表用的函数名称
// 函数参数: 这个需要符合RPC服务的调用签名, 及第一个参数是请求，第二个参数是响应
// 函数返回: rpc函数的返回是 连接异常信息, 真正的业务Response不能作为返回值
